package com.itany.corejava.code15_stream;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年12月15日 14:09
 */
public class Test02_中间操作 {
    private static List<Integer> list= Arrays.asList(1,2,3,4,1,13,15,6,4,9,2);
    public static void main(String[] args) {
        // filterTest();
        // distinctTest();
        // limitTest();
        // skipTest();
        // queryPage(2,3);
        // mapTest();
        // sortedTest();
        // sortedComparatorTest();
        sortedComparatorTest2();
    }

    public static void filterTest(){

        // 过滤操作，用于过滤元素是否符合指定规则
        // list.stream().filter(new Predicate<Integer>() {
        //     @Override
        //     public boolean test(Integer integer) {
        //         return integer%2==0;
        //     }
        // }).forEach(new Consumer<Integer>() {
        //     @Override
        //     public void accept(Integer integer) {
        //         System.out.println(integer);
        //     }
        // });

        list.stream().filter(i->i%2==0).forEach(System.out::println);






    }

    public static void distinctTest(){

        //去除重复的元素
        list.stream().distinct().forEach(System.out::println);
    }

    public static void limitTest(){
        //limit()获取前6个元素
        list.stream().limit(6).forEach(System.out::println);
    }

    public static void skipTest(){

        //跳过前6个元素，如果跳过前20个元素，跳过的数量超过元素的数量，则显示为空流
        list.stream().skip(6).forEach(System.out::println);
    }

    /**
     * 模拟分页
     * @param pageNo 页码
     * @param pageSize 每页显示的数据量
     */
    public static void queryPage(int pageNo,int pageSize){

        // 第2页的数据
        list.stream().skip((pageNo-1)*pageSize).limit(pageSize).forEach(System.out::println);
    }
    public static void mapTest(){

        // list.stream().map(new Function<Integer,Integer>(){
        //     @Override
        //     public Integer apply(Integer integer) {
        //         return integer*2;
        //     }
        // });

        list.stream().map(i->i*2).forEach(System.out::println);
    }

    public static void sortedTest(){
        list.stream().sorted().forEach(System.out::println);//数值，升序排列

        List<String> strs=Arrays.asList("baby","alice","coco","admin");//字符串，字典顺序
        strs.stream()
                .sorted().
                forEach(System.out::println);
    }


    public static void sortedComparatorTest(){
        // list.stream().sorted(new Comparator<Integer>() {
        //     @Override
        //     public int compare(Integer o1, Integer o2) {
        //         return o1-o2;
        //     }
        // });
        list.stream()
                .sorted((o1,o2)->o2-o1)
                .forEach(System.out::println);


    }

    public static void sortedComparatorTest2(){
        List<String> strs=Arrays.asList("bab","alicea","c","ain");
        strs.stream()
                .sorted((o1,o2)->o1.length()-o2.length())
                .forEach(System.out::println);
    }
}
